package com.tengju.bff.interfaces.covercharge.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tengju.bff.interfaces.covercharge.entity.po.ServiceRewardPunishDetail;
import com.tengju.bff.interfaces.covercharge.entity.vo.*;
import java.util.List;

/**
 * <p>
 * 奖惩明细表 服务类
 * </p>
 *
 * @author xx
 * @since 2020-12-16
 */
public interface IServiceRewardPunishDetailService extends IService<ServiceRewardPunishDetail> {

    /**
     * 获取申请单信息
     * @param adminPunishApplyQuery 请求参数
     * @return 返回结果
     */
    IPage<AdminPunishApplyVo> getApplyInfo(AdminPunishApplyQuery adminPunishApplyQuery);

    /**
     * 新增申请单
     * @param adminPunishApplySave 请求参数
     */
    void insertApply(AdminPunishApplySave adminPunishApplySave);

    /**
     * 获取申请单审核信息
     * @param adminPunishDealQuery 请求参数
     * @return 返回结果
     */
    IPage<AdminPunishDealVo> getApplyCheckList(AdminPunishDealQuery adminPunishDealQuery);

    /**
     * 获取申请单审核总数
     * @param adminPunishDealQuery 请求参数
     * @return 返回结果
     */
    Integer getApplyCheckTotal(AdminPunishDealQuery adminPunishDealQuery);

    /**
     * 根据申请编号单获取信息
     * @param applyNo 申请编号
     * @return 返回结果
     */
    List<ServiceRewardPunishDetail> getApplyList(String applyNo);

    /**
     * 更新任务
     * @param taskNo 任务编号
     * @param status 状态
     * @param msg 描述
     * @return 返回结果
     */
    Boolean updateTask(String taskNo,Integer status,String msg);

    /**
     * 获取页码
     * @param count 总数
     * @return 返回结果
     */
    Integer getPage(Long count);

    /**
     * 根据申请编号单获取总数
     * @param applyNoList 申请编号
     * @return 返回结果
     */
    Integer sumApplyNum(List<String> applyNoList);

    /**
     * 剔除重复元素
     * @param list
     * @return
     * */
    List<String> removeDuplicate(List<String> list);

    /**
     * redis设置和判断
     * @param id 申请记录id
     * @param applyNo 运单号
     * @return 返回结果
     */
    RewardPunishRedisReturnVo redisSet(Long id,String applyNo);

    /**
     * 审核通过
     * @param taskNo 申请任务
     * @param id 申请记录id
     * @param dealBy 审核人
     * @return 返回结果
     */
    Boolean approved(String taskNo,Long id,String dealBy);

    /**
     * 驳回
     * @param id 申请记录id
     * @param dealBy 审核人
     * @param taskNo 申请任务
     * @return 返回结果
     */
    Boolean rejectApply(Long id,String dealBy,String taskNo);

    /**
     * 撤销
     * @param id 申请记录id
     * @param dealBy 审核人
     * @param applyNo 申请编号
     * @param taskNo 申请任务
     * @return 返回结果
     */
    Boolean revokeApply(Long id,String dealBy,String applyNo,String taskNo);

    /**
     * 根据申请单号提交申请单
     * @param  applyNo 申请单
     * @param dealBy 审核人
     */
    void submitApplyByApplyId(String applyNo,String dealBy);

    /**
     * 根据申请id提交申请单
     * @param  id 申请主键id
     * @param applyNo 申请单号
     * @param operate 操作人
     */
    void submitApplyById(long id, String applyNo, String operate);


    /**
     * 根据申请单号删除申请单
     * @param  applyNo 申请单
     * @param operate 操作人
     */
    void delApplyByApplyId(String applyNo,String operate);

    /**
     * 根据申请id删除申请单
     * @param  id 申请id
     * @param operate 操作人
     */
    void delApplyById(long id, String applyNo, String operate);


    /**
     * 创建导入任务
     * @param allSize - 导入文件大小
     * @param adminPunishImport 导入文件
     * @return 返回创建结果
     */
    PunishApplyImportTaskResult importPunishApplyTask(int allSize, AdminPunishImport adminPunishImport);


    /**
     * 根据申请单号删除申请单
     * @param  taskNo 任务编号
     * @param punishApplyInfo 信息
     * @param adminPunishImport 导入信息
     */
    void importPunishApply(String taskNo, List<String[]> punishApplyInfo, AdminPunishImport adminPunishImport);


    /**
     * 编辑申请单
     * @param adminPunishApplySave 更新实体
     */
    void updateApply(AdminPunishApplySave adminPunishApplySave);
}
